package dao.impl;

import dao.DAOFactory;
import dao.IAirportDAO;
import dao.ICountryDAO;
import dao.IFlightDAO;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class HSQLDBDAOFactory extends DAOFactory {
    private static Connection connection;
    private final static Logger logs = Logger.getLogger(DAOFactory.class);
    //установка соединения с базой данных
    public static Connection getConnection() {
        BasicConfigurator.configure();
        if (connection!=null) {
            return connection;
        }
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("C://Project/Config.properties"));
        } catch (IOException e) {
            logs.error("Ошибка подключения файла конфигураций "+e);
        }
        try {
            Class.forName(properties.getProperty("HsqlDriver"));
        } catch(ClassNotFoundException e) {
            logs.error("Ошибка загрузки драйвера "+e);
        }
        try {
            connection = DriverManager.getConnection(properties.getProperty("HsqlConnection"));
        } catch(SQLException e) {
            logs.error("Ошибка создания соединения "+e);
        }
        try {
            properties.load(new FileInputStream("C://Project/InitialDB.properties"));
        } catch (IOException e) {
            logs.error("Ошибка подключения файла конфигураций(БД) "+e);
        }
        try {
            Statement statement = connection.createStatement();
            for (int i=1; i<16; i++) {
                statement.executeUpdate(properties.getProperty("SqlCreate"+i));
            }
            } catch (SQLException e) {
                logs.error("Ошибка создания начальной БД "+e);
            }
        return connection;
    }
    public IFlightDAO getFlightDAO() {
        return new HSQLDBFlightDAO();
    }
    public IAirportDAO getAirportDAO() {
        return new HSQLDBAirportDAO();
    }
    public ICountryDAO getCountryDAO() {
        return new HSQLDBCountryDAO();
}
}
